package net.wanho.controller.monitor;

import net.wanho.service.monitor.UserOnlineServiceI;
import net.wanho.shiro.session.ShiroSession;
import net.wanho.vo.PageVo;
import net.wanho.vo.TableDataInfo;
import org.apache.shiro.session.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

@RestController
@RequestMapping("/monitor/session")
public class UserOnlineController {

    @Autowired
    private UserOnlineServiceI userOnlineService;

    @GetMapping("/list")
    public TableDataInfo list(PageVo pageVo){
        /*获取所有登录session
        *       目前Session中扩展信息五个中有2个已经赋值（os,browser）
        *       目前是查询所有，并没有分页
        *       要实现分页两种方式：（假分页）
        *           1.使用前端分页（后端传所有数据，前端来分页）
        *           2.使用后端分页，虽然都查出来了，但给对应页码的数据（我们使用）
         */
        Collection<Session> sessions = userOnlineService.getActiveSessions();

        // 把Collection<Session> 转 List<ShiroSession>
        List<ShiroSession> shiroSessions = new ArrayList<>();
        for(Session session: sessions){
            if(session!=null && session instanceof ShiroSession){
                ShiroSession shiroSession = (ShiroSession) session;
                shiroSessions.add(shiroSession);
            }
        }

        int start =(pageVo.getPageNum()-1)*pageVo.getPageSize();
        int end = start+pageVo.getPageSize();
        List<ShiroSession> currentPageUser = shiroSessions.subList(start, end>shiroSessions.size()?shiroSessions.size():end);

        // 创建TableDataInfo对象
        TableDataInfo tableDataInfo = new TableDataInfo();
        tableDataInfo.setRows(currentPageUser);
        tableDataInfo.setTotal(new Long(shiroSessions.size()));
        return  tableDataInfo;


    }
}
